package uva.sc.ql.test; import java.util.HashMap; import java.util.Map; import org.junit.Assert; import org.junit.Test; import uva.sc.ql.atom.*; import uva.sc.ql.expression.Expression; import uva.sc.ql.expression.binaryExpressions.*; import uva.sc.ql.expression.unaryExpressions.*; import uva.sc.ql.evaluator.EvaluatorVisitor; import uva.sc.ql.gui.helpers.QuestionData; @SuppressWarnings({"rawtypes", "unchecked"}) public class EvaluatorVisitorTest { @Test public void id() { Map <ID, QuestionData> table = new HashMap<ID, QuestionData>(); ID id = new ID("testQuestion"); QuestionData data = new QuestionData(new NumberAtom(53.)); table.put(id, data); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(table); Expression expr = id; NumberAtom result = (NumberAtom) expr.accept(evalVisitor); Assert.assertTrue("Value of testQuestion stored in the table, expexted 53 but got " + result.getValue(), result.getValue() == 53); } @Test public void addition() { Expression expr = new Addition(new NumberAtom(24.), new NumberAtom(53.)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); NumberAtom result = (NumberAtom) expr.accept(evalVisitor); Assert.assertTrue("24 addited with 53, expected 77 but got " + result.getValue(), result.getValue() == 77); } public void substraction() { Expression expr = new Substraction(new NumberAtom(24.), new NumberAtom(53.)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); NumberAtom result = (NumberAtom) expr.accept(evalVisitor); Assert.assertTrue("24 substracted by 53, expected -29 but got " + result.getValue(), result.getValue() == -29); } @Test public void multiplication() { Expression expr = new Multiplication(new NumberAtom(24.), new NumberAtom(53.)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); NumberAtom result = (NumberAtom) expr.accept(evalVisitor); Assert.assertTrue("24 multiplied by 53, expected 1072 but got " + result.getValue(), result.getValue() == 1272); } @Test public void divisionByZero() { Expression expr = new Division(new NumberAtom(24.), new NumberAtom(0.)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); NumberAtom result = (NumberAtom) expr.accept(evalVisitor); Assert.assertTrue("24 divided 0, divide by zero should return Infinity but got " + result.getValue(), Double.isInfinite(result.getValue())); } @Test public void divideZeroByZero() { Expression expr = new Division(new NumberAtom(0.), new NumberAtom(0.)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); NumberAtom result = (NumberAtom) expr.accept(evalVisitor); Assert.assertTrue("0 divided by 0, divide by zero should return Infinity but got " + result.getValue(), Double.isNaN(result.getValue())); } @Test public void division() { Expression expr = new Division(new NumberAtom(24.), new NumberAtom(8.)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); NumberAtom result = (NumberAtom) expr.accept(evalVisitor); Assert.assertTrue("24 divided by 8, expected 3 but got " + result.getValue(), result.getValue() == 3); } @Test public void modulus() { Expression expr = new Modulus(new NumberAtom(26.), new NumberAtom(8.)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); NumberAtom result = (NumberAtom) expr.accept(evalVisitor); Assert.assertTrue("26 modulus 8, expexted 2 but got " + result.getValue(), result.getValue() == 2); } @Test public void modulusByZero() { Expression expr = new Modulus(new NumberAtom(26.), new NumberAtom(0.)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); NumberAtom result = (NumberAtom) expr.accept(evalVisitor); Assert.assertTrue("26 modulus 0, expexted isNaN but got " + result.getValue(), Double.isNaN(result.getValue())); } @Test public void and() { Expression expr = new And(new BooleanAtom(true), new BooleanAtom(false)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); BooleanAtom result = (BooleanAtom) expr.accept(evalVisitor); Assert.assertTrue("true && false, expected false but got " + result.getValue(), result.getValue() == false); } @Test public void or() { Expression expr = new Or(new BooleanAtom(false), new BooleanAtom(true)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); BooleanAtom result = (BooleanAtom) expr.accept(evalVisitor); Assert.assertTrue("false || true, expected true but got " + result.getValue(), result.getValue() == true); } @Test public void equalsStringNonEquality() { Expression expr = new Equals(new StringAtom("EquallityTest"), new StringAtom("Test")); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); BooleanAtom result = (BooleanAtom) expr.accept(evalVisitor); Assert.assertTrue("\"EquallityTest\" == \"Test\", expected false but got " + result.getValue(), result.getValue() == false); } @Test public void equalsString() { Expression expr = new Equals(new StringAtom("Test"), new StringAtom("Test")); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); BooleanAtom result = (BooleanAtom) expr.accept(evalVisitor); Assert.assertTrue("\"Test\" == \"Test\", expected true but got " + result.getValue(), result.getValue() == true); } @Test public void equalsNumberNonEquality() { Expression expr = new Equals(new NumberAtom(10.), new NumberAtom(100.)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); BooleanAtom result = (BooleanAtom) expr.accept(evalVisitor); Assert.assertTrue("10 == 100, expected false but got " + result.getValue(), result.getValue() == false); } @Test public void equalsNumber() { Expression expr = new Equals(new NumberAtom(100.), new NumberAtom(100.)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); BooleanAtom result = (BooleanAtom) expr.accept(evalVisitor); Assert.assertTrue("100 == 100, expected true but got " + result.getValue(), result.getValue() == true); } @Test public void equalsBooleanNonEquality() { Expression expr = new Equals(new BooleanAtom(true), new BooleanAtom(false)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); BooleanAtom result = (BooleanAtom) expr.accept(evalVisitor); Assert.assertTrue("true == false, expected false but got " + result.getValue(), result.getValue() == false); } @Test public void equalsBoolean() { Expression expr = new Equals(new BooleanAtom(false), new BooleanAtom(false)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); BooleanAtom result = (BooleanAtom) expr.accept(evalVisitor); Assert.assertTrue("false == false, expected true but got " + result.getValue(), result.getValue() == true); } @Test public void notEqualsString() { Expression expr = new NotEquals(new StringAtom("EquallityTest"), new StringAtom("Test")); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); BooleanAtom result = (BooleanAtom) expr.accept(evalVisitor); Assert.assertTrue("\"EquallityTest\" != \"Test\", expected true but got " + result.getValue(), result.getValue() == true); } @Test public void notEqualsStringEquality() { Expression expr = new NotEquals(new StringAtom("Test"), new StringAtom("Test")); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); BooleanAtom result = (BooleanAtom) expr.accept(evalVisitor); Assert.assertTrue("\"Test\" != \"Test\", expected false but got " + result.getValue(), result.getValue() == false); } @Test public void notEqualsNumber() { Expression expr = new NotEquals(new NumberAtom(10.), new NumberAtom(100.)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); BooleanAtom result = (BooleanAtom) expr.accept(evalVisitor); Assert.assertTrue("10 != 100, expected true but got " + result.getValue(), result.getValue() == true); } @Test public void notEqualsNumberEquality() { Expression expr = new NotEquals(new NumberAtom(100.), new NumberAtom(100.)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); BooleanAtom result = (BooleanAtom) expr.accept(evalVisitor); Assert.assertTrue("100 != 100, expected false but got " + result.getValue(), result.getValue() == false); } @Test public void notEqualsBoolean() { Expression expr = new NotEquals(new BooleanAtom(true), new BooleanAtom(false)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); BooleanAtom result = (BooleanAtom) expr.accept(evalVisitor); Assert.assertTrue("true != false, expected true but got " + result.getValue(), result.getValue() == true); } @Test public void notEqualsBooleanEquality() { Expression expr = new NotEquals(new BooleanAtom(true), new BooleanAtom(true)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); BooleanAtom result = (BooleanAtom) expr.accept(evalVisitor); Assert.assertTrue("true != true, expected false but got " + result.getValue(), result.getValue() == false); } @Test public void greaterThanEquality() { Expression expr = new GreaterThan(new NumberAtom(10.), new NumberAtom(10.)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); BooleanAtom result = (BooleanAtom) expr.accept(evalVisitor); Assert.assertTrue("10 > 10, expected false but got " + result.getValue(), result.getValue() == false); } @Test public void notGreaterThan() { Expression expr = new GreaterThan(new NumberAtom(9.99), new NumberAtom(10.)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); BooleanAtom result = (BooleanAtom) expr.accept(evalVisitor); Assert.assertTrue("9.99 > 10, expected false but got " + result.getValue(), result.getValue() == false); } @Test public void greaterThanEqualsEquality() { Expression expr = new GreaterThanEquals(new NumberAtom(10.), new NumberAtom(10.)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); BooleanAtom result = (BooleanAtom) expr.accept(evalVisitor); Assert.assertTrue("10 >= 10, expected true but got " + result.getValue(), result.getValue() == true); } @Test public void greaterThanEquals() { Expression expr = new GreaterThanEquals(new NumberAtom(10.01), new NumberAtom(10.)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); BooleanAtom result = (BooleanAtom) expr.accept(evalVisitor); Assert.assertTrue("10.01 >= 10, expected true but got " + result.getValue(), result.getValue() == true); } @Test public void lesserThanEquality() { Expression expr = new LesserThan(new NumberAtom(10.), new NumberAtom(10.)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); BooleanAtom result = (BooleanAtom) expr.accept(evalVisitor); Assert.assertTrue("10 < 10, expected false but got " + result.getValue(), result.getValue() == false); } @Test public void lesserThan() { Expression expr = new LesserThan(new NumberAtom(9.99), new NumberAtom(10.)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); BooleanAtom result = (BooleanAtom) expr.accept(evalVisitor); Assert.assertTrue("9.99 < 10, expected true but got " + result.getValue(), result.getValue() == true); } @Test public void lesserThanEqualsEquality() { Expression expr = new LesserThanEquals(new NumberAtom(10.), new NumberAtom(10.)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); BooleanAtom result = (BooleanAtom) expr.accept(evalVisitor); Assert.assertTrue("10 <= 10, expected true but got " + result.getValue(), result.getValue() == true); } @Test public void notLesserThanEquals() { Expression expr = new LesserThanEquals(new NumberAtom(10.01), new NumberAtom(10.)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); BooleanAtom result = (BooleanAtom) expr.accept(evalVisitor); Assert.assertTrue("10.01 <= 10, expected false but got " + result.getValue(), result.getValue() == false); } @Test public void minus() { Expression expr = new Minus(new NumberAtom(-26.)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); NumberAtom result = (NumberAtom) expr.accept(evalVisitor); Assert.assertTrue("minus -26 , expexted 26 but got " + result.getValue(), result.getValue() == 26); } @Test public void not() { Expression expr = new Not(new BooleanAtom(false)); EvaluatorVisitor evalVisitor = new EvaluatorVisitor(null); BooleanAtom result = (BooleanAtom) expr.accept(evalVisitor); Assert.assertTrue("not false, expexted true but got " + result.getValue(), result.getValue()); } }